/**
 * @file Alumno.java
 * @brief Clase Alumno
 * @author Jose Antonio Lozano y Borja Molina Zea
 * @date Marzo 2013
 */
package sgeb;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Alumno extends Persona {

    private Integer alumnoID;
    private String categoria;
    private String colegio;
    private int experiencia;
    private String antiguoEquipo;
    private String talla;
    private String nombreTutor;
    private String anotaciones;
    private String cuentaBancaria;
    private Integer puntuacion;
    private String dniTutor;
    private int dorsal;

    /*Constructor por defecto*/
    public Alumno() {
    }

    /*Constructor*/
    public Alumno(Integer alumnoID) {
	this.alumnoID = alumnoID;
    }

    /*Constructor con parametros*/
    public Alumno(String categoria, String colegio, int experiencia, String talla, String nombreTutor, String dni, String nombre, String apellidos, Date fechaNacimiento, String direccion, String localidad, String provincia, int cp, Date fechaIngreso, int telFijo, int telMovil, String correo, String sexo, String cuentaBancaria, int dorsal) {
	//this.alumnoID = alumnoID;                   //ID del alumno
	this.categoria = categoria;                 //Categoria de baloncesto
	this.colegio = colegio;                     //Colegio
	this.experiencia = experiencia;             //Experiencia en baloncesto
	this.talla = talla;                         //Talla camiseta
	this.nombreTutor = nombreTutor;             //Nombre del tutor
	this.dniTutor = dni;                          //DNI del tutor
	this.setNombre(nombre);                     //Nombre
	this.setApellidos(apellidos);               //Apellidos
	this.setCorreo(correo);                     //Correo Electronico
	this.setCp(cp);                             //Codigo Postal
	this.setDireccion(direccion);               //Dirección
	this.setFechaIngreso(fechaIngreso);         //Fecha ingreso
	this.setFechaNacimiento(fechaNacimiento);   //Fecha Nacimiento
	this.setLocalidad(localidad);               //Localidad
	this.setProvincia(provincia);               //Provincia
	this.setTefFijo(telFijo);                   //Telefono Fijo
	this.setTefMovil(telMovil);                 //Telefono Movil
	this.setCuentaBancaria(cuentaBancaria);
	this.setSexo(sexo);
        this.dorsal=dorsal;
        
    }

    /*Constructor que btiene los datos de un alumno de la BD a través de su DNI*/
    public Alumno(String dni) {
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "SELECT * FROM alumno, persona WHERE persona.dni='" + dni + "' and alumno='" + dni + "'";
	    Statement st = cn.createStatement();
	    ResultSet rs = st.executeQuery(sql);
	    this.dniTutor = dni;
	    this.alumnoID = (rs.getInt("alumno.id"));
	    this.categoria = (rs.getString("alumno.categoria"));
	    this.colegio = (rs.getString("alumno.colegio"));
	    this.experiencia = (rs.getInt("alumno.experiencia"));
	    this.talla = (rs.getString("alumno.talla"));
	    this.nombreTutor = (rs.getString("alumno.nombreTutor"));
	    this.setNombre(rs.getString("personas.nombre"));
	    this.setApellidos(rs.getString("personas.apellidos"));
	    this.setCorreo(rs.getString("personas.correo"));
	    this.setCp(rs.getInt("personas.cp"));
	    this.setDireccion(rs.getString("personas.direccion"));
	    this.setFechaIngreso(rs.getDate("personas.fechaIngreso"));
	    this.setFechaNacimiento(rs.getDate("personas.fechaNacimiento"));
	    this.setLocalidad(rs.getString("personas.localidad"));
	    this.setProvincia(rs.getString("personas.provincia"));
	    this.setTefFijo(rs.getInt("personas.telFijo"));
	    this.setTefMovil(rs.getInt("personas.telMovil"));
	    this.setCuentaBancaria(rs.getString("personas.cuentaBancaria"));
	    this.setSexo(rs.getString("personas.sexo"));
	    this.setDorsal(rs.getInt("alumno.dorsal"));
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	}
    }

    /**
     * Construye un objeto alumno a partir del id que lo representa en la bd
     *
     * @param id identificador único del alumno
     * @author Borja Molina Zea
     */
    public Alumno(int id) {
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "SELECT * FROM persona,alumno where persona.id=" + id + " and alumno.id=" + id;
	    //Statement st = cn.createStatement();
	    //ResultSet rs = st.executeQuery(sql);
	    //String colegio = rs.getString("alumno.colegio");
	    Statement stm = cn.createStatement();
	    ResultSet rs = stm.executeQuery(sql);
	    while (rs.next()) {



		this.dniTutor = rs.getString("dniTutor");
		this.alumnoID = (rs.getInt("alumno.id"));
		this.categoria = (rs.getString("alumno.categoria"));
		this.colegio = (rs.getString("alumno.colegio"));
		this.experiencia = (rs.getInt("alumno.experiencia"));
		this.talla = (rs.getString("alumno.talla"));
		this.nombreTutor = (rs.getString("alumno.nombreTutor"));
		this.cuentaBancaria = (rs.getString("alumno.cuentaBancaria"));
		this.setNombre(rs.getString("persona.nombre"));
		this.setApellidos(rs.getString("persona.apellidos"));
		this.setCorreo(rs.getString("persona.correo"));
		this.setCp(rs.getInt("persona.cp"));
		this.setDireccion(rs.getString("persona.direccion"));
		this.setFechaIngreso(rs.getDate("persona.fechaIngreso"));
		this.setFechaNacimiento(rs.getDate("persona.fechaNacimiento"));
		this.setLocalidad(rs.getString("persona.localidad"));
		this.setProvincia(rs.getString("persona.provincia"));
		this.setTefFijo(rs.getInt("persona.telFijo"));
		this.setTefMovil(rs.getInt("persona.telMovil"));
		this.setSexo(rs.getString("persona.sexo"));
		this.setDorsal(rs.getInt("alumno.dorsal"));
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	}
    }

    /**
     * Elimnina de la bd a un alumno
     *
     * @param id identificador del alumno a borrar
     * @return true si no ha habido ningún error
     * @author Borja Molina
     */
    public boolean bajaAlumno(int id) {
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "delete FROM alumno where alumno.id=" + id;
	    Statement stm = cn.createStatement();
	    stm.executeUpdate(sql);
	    String sql2 = "delete from persona where persona.id=" + id;
	    Statement stm2 = cn.createStatement();
	    stm.executeUpdate(sql2);
	    return true;
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	    return false;
	}
    }

    /**
     * Modifica un alumno
     *
     * @param nombre
     * @param apellidos
     * @param fechaNacimiento
     * @param direccion
     * @param localidad
     * @param provincia
     * @param cp
     * @param fechaIngreso
     * @param telFijo
     * @param telMovil
     * @param correo
     * @param sexo
     * @param categoria
     * @param colegio
     * @param experiencia
     * @param talla
     * @param nombreTutor
     * @param dniTutor
     * @param id identificador del alumno a ser modificado
     * @return true si no ha habido ningún fallo
     */
    public boolean modificarAlumno(String nombre, String apellidos, Date fechaNacimiento, String direccion, String localidad, String provincia, int cp, Date fechaIngreso, int telFijo, int telMovil, String cuentaBancaria, String correo, String sexo, String categoria, String colegio, int experiencia, String talla, String nombreTutor, String dniTutor, int id,int equipo_id, int dorsal) {
	System.out.println(dorsal);
	try {

	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "update alumno,persona ";
	    sql += "set nombre='" + nombre + "', ";
	    sql += "apellidos='" + apellidos + "', ";
	    //sql+="set fechaNacimiento="+"'2000-10-10'"+" ";
	    sql += "direccion='" + direccion + "', ";
	    sql += "localidad='" + localidad + "', ";
	    sql += "provincia='" + provincia + "', ";
	    sql += "cp=" + cp + ", ";
	    sql += "telFijo=" + telFijo + ", ";
	    sql += "telMovil=" + telMovil + ", ";
	    sql += "cuentaBancaria='" + cuentaBancaria + "', ";
	    sql += "correo='" + correo + "', ";
	    sql += "sexo='" + sexo + "', ";
	    sql += "categoria='" + categoria + "', ";
	    sql += "colegio='" + colegio + "', ";
	    sql += "experiencia=" + experiencia + ", ";
	    sql += "talla='" + talla + "', ";
	    sql += "nombreTutor='" + nombreTutor + "', ";
	    sql += "dniTutor='" + dniTutor + "', ";
            sql += "dorsal=" + dorsal + " ";
	    sql += "where alumno.id=" + id + " and persona.id=" + id;
	    System.out.println(sql);
	    Statement stm = cn.createStatement();
	    stm.executeUpdate(sql);

	    this.inscribirseAEquipo(id,equipo_id);
	    return true;
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	    return false;
	}
    }

    /*Devuelve el ID de un alumno*/
    public Integer getAlumnoID() {
	return alumnoID;
    }

    /*Asigna un ID a un alumno*/
    public void setAlumnoID(Integer alumnoID) {
	this.alumnoID = alumnoID;
    }

    /*Devuelve la categoria de un alumno*/
    public String getCategoria() {
	return categoria;
    }

    /*Asigna una categoria a un alumno*/
    public void setCategoria(String categoria) {
	this.categoria = categoria;
    }

    /*Devuelve el colegio de un alumno*/
    public String getColegio() {
	return colegio;
    }

    /*Asigna un colegio a un alumno*/
    public void setColegio(String colegio) {
	this.colegio = colegio;
    }

    /*Devuelve la experiencia en baloncesto de un alumno*/
    public int getExperiencia() {
	return experiencia;
    }

    /*Asigna la experiencia en baloncesto de un alumno*/
    public void setExperiencia(int experiencia) {
	this.experiencia = experiencia;
    }

    /*Devuelve el antiguo equipo al que pertenecia un alumno*/
    public String getAntiguoEquipo() {
	return antiguoEquipo;
    }

    /*Asigna un antiguo equipo al que pertenecia un alumno*/
    public void setAntiguoEquipo(String antiguoEquipo) {
	this.antiguoEquipo = antiguoEquipo;
    }

    /*Devuelve la talla de camiseta de un alumno*/
    public String getTalla() {
	return talla;
    }

    /*Asigna una talla de camiseta a un alumno*/
    public void setTalla(String talla) {
	this.talla = talla;
    }

    /*Devuelve el nombre del tutor de un alumno*/
    public String getNombreTutor() {
	return nombreTutor;
    }

    /*Asigna el nombre del tutor a un alumno*/
    public void setNombreTutor(String nombreTutor) {
	this.nombreTutor = nombreTutor;
    }

    /*Devuelve las anotaciones de un alumno*/
    public String getAnotaciones() {
	return anotaciones;
    }

    /*Asigna una anotaciones a un alumno*/
    public void setAnotaciones(String anotaciones) {
	this.anotaciones = anotaciones;
    }

    /*Devuelve la cuenta bancaria asociada a un alumno*/
    public String getCuentaBancaria() {
	return cuentaBancaria;
    }

    /*Asigna una cuenta bancaria a un alumno*/
    public void setCuentaBancaria(String cuentaBancaria) {
	this.cuentaBancaria = cuentaBancaria;
    }

    /*Devuelve la puntuación de un alumno*/
    public Integer getPuntuacion() {
	return puntuacion;
    }

    /*Asigna una puntuación a un alumno*/
    public void setPuntuacion(Integer puntuacion) {
	this.puntuacion = puntuacion;
    }

    /*Devuelve el DNI del tutor de un alumno*/
    public String getDniTutor() {
	return dniTutor;
    }

    /*Asigna un DNI al tutor de un alumno*/
    public void setDniTutor(String dniTutor) {
	this.dniTutor = dniTutor;
    }

    /**
     * Guarda un alumno en la bd
     *
     * @return El identificador único del alumno insertado
     * @author Borja Molina
     */
    public int guardarAlum() {
	int id = this.guardarPer("", this.getNombre(), this.getApellidos(), this.getFechaNacimiento(), this.getDireccion(), this.getLocalidad(), this.getProvincia(), this.getCp(), this.getFechaIngreso(), this.getTefFijo(), this.getTefMovil(), this.getCorreo(), this.getSexo());
	//System.out.println("aaaaaaaaaa========="+this.getDniTutor());
	conectar cc = new conectar();
	Connection cn = cc.conexion();
	String sql = "INSERT INTO alumno (id, dniTutor, colegio, experiencia, antiguoEquipo, talla, categoria, nombreTutor, cuentaBancaria) VALUES (?,?,?,?,?,?,?,?,?)";
	try {
	    PreparedStatement pst = cn.prepareStatement(sql);
	    // TODO add your handling code here:
	    pst.setInt(1, id);
	    pst.setString(2, this.getDniTutor());
	    pst.setString(3, this.getColegio());
	    pst.setInt(4, this.getExperiencia());
	    pst.setString(5, this.getAntiguoEquipo());
	    pst.setString(6, this.getTalla());
	    pst.setString(7, this.getCategoria());
	    pst.setString(8, this.getNombreTutor());
	    //pst.setString(8, alum.getAnotaciones());    
	    pst.setString(9, this.getCuentaBancaria());

	    int n = pst.executeUpdate();

	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "alumno guardado");
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Alumno.class.getName()).log(Level.SEVERE, null, ex);
	}
	return id;

    }

   /**
     * Inscribe un alumno en un equipo
     *
     * @return Operacion correcta
     * @author Pablo Torres
     */
    public boolean inscribirseAEquipo(int id,int equipo_id) {
	conectar cc = new conectar();
	Connection cn = cc.conexion();
	int contador=0;
	//Comprpbamos si ya existe
	String sql = "SELECT * FROM alumno_equipo WHERE alumno_equipo.idalumno='"+id+"'";
	try {
	    Statement stm = cn.createStatement();
	    ResultSet rs = stm.executeQuery(sql);
	    
	    while (rs.next()) {
		contador++;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Alumno.class.getName()).log(Level.SEVERE, null, ex);
	}
	
	//Si no está
	if(contador==0){
	    sql = "INSERT INTO alumno_equipo (idalumno,idequipo) VALUES (?,?)";
	    try {
		PreparedStatement pst = cn.prepareStatement(sql);
		// TODO add your handling code here:
		pst.setInt(1,id);
		pst.setInt(2,equipo_id);
		int n = pst.executeUpdate();
		return true;
	    } catch (SQLException ex) {
		Logger.getLogger(Alumno.class.getName()).log(Level.SEVERE, null, ex);
	    }
	}
	
	//Si ya existe
	else{
	    sql = "UPDATE alumno_equipo SET idequipo='"+equipo_id+"' WHERE idalumno='"+id+"'";
	    try {
		PreparedStatement pst = cn.prepareStatement(sql);
		int n = pst.executeUpdate();
		return true;
	    } catch (SQLException ex) {
		Logger.getLogger(Alumno.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    
	}
	return false;
    }
    
    public void setDorsal(int num){
        this.dorsal=num;
    }
    
    public int getDorsal(){
        return this.dorsal;
    }
}
